import { isWithoutToken } from './help'
import { getUserInfo, signoutRedirect } from '@/utils/oidc/index.js'

export function setupInterceptor(service) {
  service.interceptors.request.use(
    async(config) => {
      // 防止缓存，给get请求加上时间戳
      if (config.method === 'get') {
        config.params = { ...config.params, t: new Date().getTime() }
      }
      // 处理不需要token的请求
      if (isWithoutToken(config)) {
        return config
      } else {
        const userInfo = await getUserInfo()
        if (userInfo) {
          const { token_type, access_token } = userInfo
          config.headers.Authorization = `${token_type} ${access_token}`
          const { VITE_CLIENT_ID } = import.meta.env
          config.headers['Client-Id'] = VITE_CLIENT_ID
          if (config.responseType) {
            config.headers['responseType'] = config.responseType
          }
          return config
        } else {
          signoutRedirect()
          return Promise.reject({ response: { status: 401, message: '未登录' }})
        }
      }
    },
    (error) => Promise.reject(error)
  )

  service.interceptors.response.use(
    (response) => {
      const { method } = response?.config
      const { code } = response?.data
      switch (code) {
        case 0:
          if (method !== 'get') {
            $message.success(response.data.msg)
          }
          break
        default:
          $message.error(response.data.msg)
          break
      }
      return response?.data
    },
    (error) => {
      const { status } = error.response
      if (status === 401) {
        signoutRedirect()
      } else if (status === 403) {
        $message.error('暂无权限访问，请联系管理员')
        signoutRedirect()
        return Promise.reject(error)
      } else {
        return Promise.reject(error)
      }
    }
  )
}
